
using System.Collections;

using Curriculum.LectoresXML.LectorMetadatos;

namespace Curriculum.Manejadores
{
	/// <summary>
	/// Summary description for MasterData.
	/// </summary>
	public class MasterData
	{
		private static Hashtable _masterDatas;
		private string _idVersion;
		private ManejadorListasValores manejadorListasValores;
		private ManejadorTiposDatos manejadorTiposDatos;
		private ManejadorAtributosMetadatos manejadorAtributosMetadatos;
		
		private MasterData(string idVersion)
		{
			this._idVersion = idVersion;
			manejadorAtributosMetadatos = new ManejadorAtributosMetadatos(idVersion);
			manejadorListasValores = new ManejadorListasValores(idVersion);
			manejadorTiposDatos = new ManejadorTiposDatos(idVersion);
		}

		public string GetIdVersion()
		{
			return this._idVersion;
		}

		/// <summary>
		/// si la instancia no existe la crea.
		/// </summary>
		/// <param name="idVersion"></param>
		/// <returns></returns>
		public static MasterData GetInstancia(string idVersion)
		{
			if (_masterDatas == null)
			{
				_masterDatas = new Hashtable();
				_masterDatas[idVersion] = new MasterData(idVersion);
//				((MasterData)_masterDatas[idVersion]).manejadorAtributosMetadatos = new ManejadorAtributosMetadatos(idVersion);
//				((MasterData)_masterDatas[idVersion]).manejadorListasValores = new ManejadorListasValores(idVersion);
//				((MasterData)_masterDatas[idVersion]).manejadorTiposDatos = new ManejadorTiposDatos(idVersion);			
			}
			else
			{
				if (!_masterDatas.ContainsKey(idVersion))
				{
					_masterDatas[idVersion] = new MasterData(idVersion);
				}				
			}									
							
			return _masterDatas[idVersion] as MasterData;
		}

		public bool EsAtributoObligatorio(string idAtributo)
		{
			return (!GetAtributo(idAtributo).opcional);
		}
		public Atributo GetAtributo(string idAtributo)
		{
			return manejadorAtributosMetadatos.GetAtributo(idAtributo);
		}
		public string ObtenerTipo(string idTipoDato)
		{
			return manejadorTiposDatos.ObtenerTipo(idTipoDato);
		}
		public IList GetListaValores(string idAntecedente, string idAtributo)
		{
			return manejadorListasValores.GetListaValores(idAntecedente,idAtributo);
		}
		public ItemValor GetItemListaValores(string idItemLista)
		{
			return manejadorListasValores.GetItemListaValores(idItemLista);
		}
	}
}
